const app = getApp();

Page({
  data: {
    addressList: [],
    isLogin: false,
    showAddressForm: false,
    currentAddress: null,
    // 表单数据
    formData: {
      userName: '',
      telNumber: '',
      provinceName: '',
      cityName: '',
      countyName: '',
      detailInfo: '',
      isDefault: false
    }
  },

  onLoad: function() {
    this.checkLoginStatus();
  },

  onShow: function() {
    this.checkLoginStatus();
    if (this.data.isLogin) {
      this.getAddressList();
    }
  },

  // 检查登录状态
  checkLoginStatus: function() {
    const isLogin = app.globalData.isLogin;
    this.setData({
      isLogin
    });
  },

  // 获取地址列表
  getAddressList: function() {
    // 从本地存储获取地址列表
    const addressList = wx.getStorageSync('addressList') || [];
    
    this.setData({
      addressList: addressList
    });
    
    // 实际项目中应该从服务器获取地址列表
    // wx.cloud.callFunction({
    //   name: 'getAddressList',
    //   data: {
    //     userId: app.globalData.openid
    //   }
    // }).then(res => {
    //   if (res.result.success) {
    //     this.setData({
    //       addressList: res.result.data
    //     });
    //   }
    // }).catch(err => {
    //   console.error('获取地址列表失败', err);
    // });
  },

  // 打开地址表单（新增）
  showAddForm: function() {
    this.setData({
      showAddressForm: true,
      currentAddress: null,
      formData: {
        userName: '',
        telNumber: '',
        provinceName: '',
        cityName: '',
        countyName: '',
        detailInfo: '',
        isDefault: false
      }
    });
  },

  // 打开地址表单（编辑）
  showEditForm: function(e) {
    const { address } = e.currentTarget.dataset;
    
    this.setData({
      showAddressForm: true,
      currentAddress: address,
      formData: { ...address }
    });
  },

  // 关闭地址表单
  closeAddressForm: function() {
    this.setData({
      showAddressForm: false
    });
  },

  // 表单输入事件
  onInput: function(e) {
    const { field } = e.currentTarget.dataset;
    const { value } = e.detail;
    
    this.setData({
      [`formData.${field}`]: value
    });
  },

  // 地区选择器变化事件
  onRegionChange: function(e) {
    const regionValue = e.detail.value;
    
    this.setData({
      'formData.provinceName': regionValue[0],
      'formData.cityName': regionValue[1],
      'formData.countyName': regionValue[2]
    });
  },

  // 切换默认地址
  toggleDefault: function() {
    this.setData({
      'formData.isDefault': !this.data.formData.isDefault
    });
  },

  // 选择微信收货地址
  chooseWxAddress: function() {
    wx.chooseAddress({
      success: (res) => {
        this.setData({
          formData: {
            userName: res.userName,
            telNumber: res.telNumber,
            provinceName: res.provinceName,
            cityName: res.cityName,
            countyName: res.countyName,
            detailInfo: res.detailInfo,
            isDefault: this.data.formData.isDefault
          }
        });
      },
      fail: (err) => {
        if (err.errMsg !== 'chooseAddress:fail cancel') {
          wx.showToast({
            title: '获取地址失败',
            icon: 'none'
          });
        }
      }
    });
  },

  // 保存地址
  saveAddress: function() {
    // 表单验证
    const { userName, telNumber, provinceName, cityName, countyName, detailInfo } = this.data.formData;
    
    if (!userName) {
      wx.showToast({
        title: '请输入收货人姓名',
        icon: 'none'
      });
      return;
    }
    
    if (!telNumber) {
      wx.showToast({
        title: '请输入联系电话',
        icon: 'none'
      });
      return;
    }
    
    if (!provinceName || !cityName || !countyName) {
      wx.showToast({
        title: '请选择所在地区',
        icon: 'none'
      });
      return;
    }
    
    if (!detailInfo) {
      wx.showToast({
        title: '请输入详细地址',
        icon: 'none'
      });
      return;
    }
    
    // 处理电话号码格式
    if (!/^1\d{10}$/.test(telNumber) && !/^\d{3,4}-\d{7,8}$/.test(telNumber)) {
      wx.showToast({
        title: '请输入正确的电话号码',
        icon: 'none'
      });
      return;
    }
    
    // 显示加载提示
    wx.showLoading({
      title: '保存中...',
      mask: true
    });
    
    let { addressList } = this.data;
    let newAddress = { ...this.data.formData };
    
    // 生成唯一ID
    if (!this.data.currentAddress) {
      newAddress.id = 'addr_' + Date.now();
    } else {
      newAddress.id = this.data.currentAddress.id;
    }
    
    // 处理默认地址逻辑
    if (newAddress.isDefault) {
      addressList.forEach(item => {
        item.isDefault = false;
      });
    } else if (addressList.length === 0) {
      // 如果是第一个地址，自动设为默认
      newAddress.isDefault = true;
    }
    
    // 新增或更新地址
    if (this.data.currentAddress) {
      // 编辑现有地址
      const index = addressList.findIndex(item => item.id === newAddress.id);
      if (index !== -1) {
        addressList[index] = newAddress;
      }
    } else {
      // 新增地址
      addressList.push(newAddress);
    }
    
    // 保存到本地存储
    wx.setStorageSync('addressList', addressList);
    
    // 更新选中的地址（如果在checkout页面选择了地址）
    if (newAddress.isDefault) {
      wx.setStorageSync('userAddress', JSON.stringify(newAddress));
    }
    
    // 实际项目中应同步到服务器（使用云函数）
    // wx.cloud.callFunction({
    //   name: 'saveAddress',
    //   data: {
    //     userId: app.globalData.openid,
    //     address: newAddress
    //   }
    // }).then(res => {
    //   // 处理返回结果
    // }).catch(err => {
    //   console.error('保存地址失败', err);
    // });

    // 在数据库中保存地址
    const db = wx.cloud.database();
    const addressCollection = db.collection('address');

    if (this.data.currentAddress) {
      // 更新现有地址
      addressCollection.doc(newAddress.id).update({
        data: {
          ...newAddress,
          updateTime: db.serverDate()
        }
      }).then(res => {
        console.log('地址更新成功', res);
      }).catch(err => {
        console.error('地址更新失败', err);
      });
    } else {
      // 新增地址
      addressCollection.add({
        data: {
          ...newAddress,
          _openid: app.globalData.openid,
          createTime: db.serverDate(),
          updateTime: db.serverDate()
        }
      }).then(res => {
        console.log('地址添加成功', res);
      }).catch(err => {
        console.error('地址添加失败', err);
      });
    }
    
    // 隐藏加载提示
    setTimeout(() => {
      wx.hideLoading();
      
      // 更新地址列表
      this.setData({
        addressList: addressList,
        showAddressForm: false
      });
      
      wx.showToast({
        title: '保存成功',
        icon: 'success'
      });
    }, 1000);
  },

  // 设为默认地址
  setDefault: function(e) {
    const { index } = e.currentTarget.dataset;
    let { addressList } = this.data;
    
    // 更新默认状态
    addressList.forEach((item, i) => {
      item.isDefault = i === index;
    });
    
    // 保存到本地存储
    wx.setStorageSync('addressList', addressList);
    wx.setStorageSync('userAddress', JSON.stringify(addressList[index]));
    
    // 实际项目中应同步到服务器
    // wx.cloud.callFunction({
    //   name: 'setDefaultAddress',
    //   data: {
    //     userId: app.globalData.openid,
    //     addressId: addressList[index].id
    //   }
    // }).then(res => {
    //   // 处理返回结果
    // }).catch(err => {
    //   console.error('设置默认地址失败', err);
    // });

    // 在数据库中设置默认地址
    const db = wx.cloud.database();
    const _ = db.command;
    const addressCollection = db.collection('address');

    // 先将所有地址设为非默认
    addressCollection.where({
      _openid: app.globalData.openid
    }).update({
      data: {
        isDefault: false,
        updateTime: db.serverDate()
      }
    }).then(() => {
      // 再将当前地址设为默认
      addressCollection.doc(addressList[index].id).update({
        data: {
          isDefault: true,
          updateTime: db.serverDate()
        }
      }).then(res => {
        console.log('设置默认地址成功', res);
      }).catch(err => {
        console.error('设置默认地址失败', err);
      });
    });
    
    // 更新界面
    this.setData({
      addressList: addressList
    });
    
    wx.showToast({
      title: '已设为默认',
      icon: 'success'
    });
  },

  // 删除地址
  deleteAddress: function(e) {
    const { address } = e.currentTarget.dataset;
    
    wx.showModal({
      title: '提示',
      content: '确定要删除该地址吗？',
      success: (res) => {
        if (res.confirm) {
          let { addressList } = this.data;
          
          // 过滤掉要删除的地址
          addressList = addressList.filter(item => item.id !== address.id);
          
          // 如果删除的是默认地址且还有其他地址，则将第一个地址设为默认
          if (address.isDefault && addressList.length > 0) {
            addressList[0].isDefault = true;
            wx.setStorageSync('userAddress', JSON.stringify(addressList[0]));
          } else if (addressList.length === 0) {
            // 如果没有地址了，清除用户地址缓存
            wx.removeStorageSync('userAddress');
          }
          
          // 保存到本地存储
          wx.setStorageSync('addressList', addressList);
          
          // 实际项目中应同步到服务器
          // wx.cloud.callFunction({
          //   name: 'deleteAddress',
          //   data: {
          //     userId: app.globalData.openid,
          //     addressId: address.id
          //   }
          // }).then(res => {
          //   // 处理返回结果
          // }).catch(err => {
          //   console.error('删除地址失败', err);
          // });

          // 在数据库中删除地址
          const db = wx.cloud.database();
          const addressCollection = db.collection('address');
          
          addressCollection.doc(address.id).remove().then(res => {
            console.log('地址删除成功', res);
          }).catch(err => {
            console.error('地址删除失败', err);
          });
          
          // 更新界面
          this.setData({
            addressList: addressList
          });
          
          wx.showToast({
            title: '删除成功',
            icon: 'success'
          });
        }
      }
    });
  },

  // 选择地址并返回上一页
  selectAddress: function(e) {
    const { address } = e.currentTarget.dataset;
    
    // 保存所选地址到本地存储
    wx.setStorageSync('userAddress', JSON.stringify(address));
    
    // 返回上一页
    wx.navigateBack();
  },

  // 跳转到登录页面
  goToLogin: function() {
    wx.reLaunch({
      url: '/pages/login/login'
    });
  }
}); 